package org.fight.util.data;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;

import com.fight.util.PropertiesUtil;
import com.fight.util.WebUtil;

public class BaseConfigHelper {
	
	
	/**
	 * @Title: setBaseConfig
	 * @Description: 设置全局变量的函数
	 * @author 温泉
	 * @date 2012-2-24
	 * @param ServletContext
	 *            context Servlet上下文
	 * @param BaseConfigBean
	 *            baseconfigbean 配置实体类
	 * @return void 返回类型
	 * @throws
	 */
	public static void setBaseConfig(ServletContext context, BaseConfigBean baseconfigbean) {
		context.setAttribute(BaseConfigBean.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, baseconfigbean);
	}

	/**
	 * @Title: getBaseConfig
	 * @Description: 获取全局变量的函数
	 * @author 温泉
	 * @date 2012-2-24
	 * @return BaseConfigBean 返回全局配置类
	 * @throws
	 */
	public static BaseConfigBean getBaseConfig(ServletContext context) {
		return (BaseConfigBean) context.getAttribute(BaseConfigBean.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
	}

	/**
	 * @Title: init
	 * @Description: 初始化bean函数 利用java反射机制
	 * @param ServletContextEvent
	 *            servletcontextevent Servlet上下文
	 * @return void 返回类型
	 * @author: 温泉
	 * @date 2012-03-07 12:11:57 +0800
	 * @throws Exception
	 */
	public static void init(ServletContextEvent servletcontextevent) throws Exception {
		// 加载系统配置文件
		PropertiesUtil sysProperties = new PropertiesUtil("conf/system.properties");
		Class<?> baseconfigbeanClass = Class.forName("com.fight.base.model.BaseConfigBean");
		// 创建实例
		BaseConfigBean baseconfigbean = (BaseConfigBean) baseconfigbeanClass.newInstance();
		Field[] fields = baseconfigbeanClass.getDeclaredFields();

		String[] noSetMethodStr = { "ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE" };
		List<String> noSetMethods = Arrays.asList(noSetMethodStr);

		// 开始添加属性
		for (Field field : fields) {
			String fieldName = field.getName();
			if (!noSetMethods.contains(fieldName)) {
				String fieldTypeString = field.getType().toString();
				String val = sysProperties.getValue(fieldName);
				String setMethodName = "set" + WebUtil.firstWordToUpperCase(fieldName);
				// 获取方法
				Method method = baseconfigbeanClass.getMethod(setMethodName, field.getType());
				// 当为int类型时
				if ("int".equals(fieldTypeString)) {
					method.invoke(baseconfigbean, Integer.valueOf(val));
				} else {
					method.invoke(baseconfigbean, val);
				}
			}
		}
		// 将属性添加全局变量中
		BaseConfigHelper.setBaseConfig(servletcontextevent.getServletContext(), baseconfigbean);

	}

	public static String getVaues(String key) {
		PropertiesUtil propertiesUtil;
		try {
			propertiesUtil = new PropertiesUtil("conf/system.properties");
			return propertiesUtil.getValue(key);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	public static String getHttpCommonUrl() {
		return getVaues("httpCommonUrl");
	}
	public static String getHttpGetWayUrl() {
		return getVaues("httpGetWayUrl");
	}
	public static String getSyncHttpUrl(){
		return getVaues("syncHttpUrl");
	}
	public static String getFTPIpAddr(){
		return getVaues("FTPIpAddr");
	}
	public static String getFTPftpusr(){
		return getVaues("FTPftpusr");
	}
	public static String getFTPPassword(){
		return getVaues("FTPPassword");
	}
	public static String getFTPPath(){
		return getVaues("FTPPath");
	}
	public static String getCoordinateRecoveryUrl(){
		return getVaues("coordinateRecoveryUrl");
	}
	/**
	* 
	* @Title: getOlduiUrl
	* @Description: 获取跳转到老ui的连接
	* @param @return    设定文件
	* @return String    返回类型
	* @author: 余海光
	* @date 2016年10月27日 下午4:48:21
	* @throws
	 */
	public static String getOlduiUrl(){
		
		return getVaues("oldUiUrl");
	}
	/**
	* 
	* @Title: getManageUrl
	* @Description: 获取跳转到新管理的连接
	* @param @return    设定文件
	* @return String    返回类型
	* @author: 余海光
	* @date 2016年10月27日 下午4:48:21
	* @throws
	 */
	public static String getManageUrl(){
		
		return getVaues("manageUrl");
	}
	
	/**
	* 
	* @Title: getOlduiUrl
	* @Description: 获取跳转到新监控的连接
	* @param @return    设定文件
	* @return String    返回类型
	* @author: 余海光
	* @date 2016年10月27日 下午4:48:21
	* @throws
	 */
	public static String getMonitorUrl(){
		
		return getVaues("monitorUrl");
	}
	
	/**
	* 
	* @Title: getPlatform
	* @Description: 获取当前服务对应
	* @param @return    设定文件
	* @return String    返回类型
	* @author: zx
	* @date 2016年10月27日 下午4:48:21
	* @throws
	 */
	public static String getPlatform(){
		return getVaues("platforms");
	}
	
	public static String getHttpCommonUrl(String url) {
		StringBuffer bufferUrl = new StringBuffer();
		// BaseConfigHelper.getBaseConfig(ServletActionContext.getServletContext()).getHttpCommonUrl()
		bufferUrl.append(BaseConfigHelper.getHttpCommonUrl());
		bufferUrl.append(url);
		return bufferUrl.toString();
	}

	public static String getHttpGetWayUrl(String url) {
		StringBuffer bufferUrl = new StringBuffer();
		bufferUrl.append(BaseConfigHelper.getHttpGetWayUrl());
		bufferUrl.append(url);
		return bufferUrl.toString();
	}
	
	public static String getSyncHttpUrl(String url){
		
		StringBuffer bufferUrl = new StringBuffer();
		bufferUrl.append(BaseConfigHelper.getSyncHttpUrl());
		bufferUrl.append(url);
		return bufferUrl.toString();
		
	}
	
	public static String getOlduiUrl(String url){
		
		StringBuffer bufferUrl = new StringBuffer();
		bufferUrl.append(BaseConfigHelper.getOlduiUrl());
		bufferUrl.append(url);
		return bufferUrl.toString();
		
	}
	
	
	
}
